<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
    <title>姓名案例-计算属性实现</title>
</head>

<body>
    <!-- 
        计算属性；
            1.定义：要用属性不存在， 要用过已有的属性计算得来。
            2.原理：底层记住object.defineproperty 方法提供的getter 和setter方法
            3.get函数什么时候执行
                1，初次读取属性的时候
                2. 当以来的数据发生变化的时候会再次被调用
            4.优势： 与methods 实现相比   内部有缓存机制（复用）  效率更高 调试方便
            5.备注：
                1.计算属性最终会出现在vm上，可以直接读取使用
                2.如果计算属性要被修改， 那必须要写set函数去相应修改 且set中要引起计算时依赖的数据发生改变。
     -->
    <div id="root">
        姓： <input type="text" name="xing" id="xing" v-model="firstname"> <br/> 名： <input type="text" name="ming" id="ming" v-model="lastname"> <br/> 全名：
        <span>{{fullname}}</span>
    </div>
    <script>
        const vm = new Vue({
            el: "#root",
            data: {
                firstname: '张',
                lastname: '三'
            },
            computed: {
                fullname: {
                    //get有什么作用？ 当有人读取fullname时， get就会被调用 ，并且返回值就会作为fullname的值
                    //get什么时候调用？  1.初次读取fullname时侯  2.所以来的数据发生改变时。
                    get() {
                        console.log(this); //此处的this指定的是vue对象
                        return this.firstname + "-" + this.lastname;
                    },
                    //set什么时候调用？ fullname被修改时
                    set(value) {
                        const arr = value.split("-");
                        this.firstname = arr[0];
                        this.lastname = arr[1];
                    }
                }
            }
        })
    </script>
</body>

</html>